#pragma once

#include <google/protobuf/message.h>
#include <google/protobuf/util/json_util.h>
#include <memory>

/**
 * @brief Protobuf序列化器
 * 封装Google Protocol Buffers序列化功能
 */
class ProtobufSerializer {
public:
    /**
     * @brief 序列化protobuf消息
     * @param message protobuf消息对象
     * @return 序列化后的数据
     */
    static std::vector<uint8_t> serialize(const google::protobuf::Message& message);

    /**
     * @brief 反序列化protobuf消息
     * @param serialized_data 序列化后的数据
     * @param message 输出的protobuf消息对象
     * @return 反序列化是否成功
     */
    static bool deserialize(const std::vector<uint8_t>& serialized_data, 
                           google::protobuf::Message& message);

    /**
     * @brief 获取序列化器类型名称
     * @return 序列化器类型名称
     */
    static std::string name() {
        return TYPE_NAME;
    }

    /**
     * @brief 获取序列化器版本
     * @return 序列化器版本
     */
    static std::string version() {
        return VERSION;
    }

private:
    static constexpr const char* TYPE_NAME = "protobuf";
    static constexpr const char* VERSION = "3.21.0";
};
